#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <vector>
//#include <cstdio>
//
//using namespace std;
//
//bool cmp(vector<int>& a, vector<int>& b)
//{
//    if (a.size() != b.size()) return a.size() > b.size();
//    int i = a.size();
//    while (a[i] == b[i]) --i;
//    return a[i] > b[i];
//}
//vector<int> add(vector<int>& a, vector<int>& b)
//{
//    if (a.size() < b.size()) return add(b, a);
//    vector<int> c;
//    int t = 0;
//    for (int i = 0; i < a.size(); i++)
//    {
//        t += a[i];
//        if (i < b.size()) t += b[i];
//        c.push_back(t % 10);
//        t /= 10;
//    }
//    if (t) c.push_back(t);
//    return c;
//}
//vector<int> sub(vector<int>& a, vector<int>& b)
//{
//    if (cmp(b, a)) return sub(b, a);
//    vector<int> c;
//    int t = 0;
//    for (int i = 0; i < a.size(); i++)
//    {
//        if (t < 0) t = -1;
//        t += a[i];
//        if (i < b.size()) t -= b[i];
//        c.push_back((t + 10) % 10);
//    }
//    while (c.size() > 1 && c.back() == 0) c.pop_back();
//    return c;
//}
//
//vector<int> mul(vector<int>& a, vector<int>& b)
//{
//    vector<int> c(a.size() + b.size());
//    for (int i = 0; i < a.size(); i++)
//        for (int j = 0; i < b.size(); j++)
//            c[i + j] += a[i] * b[j];
//    for (int i = 0, t = 0; i < c.size(); i++)
//    {
//        t += c[i];
//        c[i] = t % 10;
//        t /= 10;
//    }
//    while (c.size() > 1 && c.back() == 0) c.pop_back();
//    return c;
//}
//void print(vector<int> a)
//{
//    for (int i = a.size() - 1; i >= 0; i--)
//        cout << a[i];
//    puts("");
//}
//int main()
//{
//    vector<int> a, b;
//    string A, B;
//    cin >> A >> B;
//    for (int i = A.size() - 1; i >= 0; i--) a.push_back(A[i] - '0');
//    for (int i = B.size() - 1; i >= 0; i--) b.push_back(B[i] - '0');
//    print(add(a, b));
//    print(sub(a, b));
//    print(mul(a, b));
//    return 0;
//}
//#include <iostream>
//#include <vector>
//#include <cstdio>
//
//using namespace std;
//
//int cmp(vector<int>& a, vector<int>& b)
//{
//    if (a.size() > b.size()) return 1;
//    if (a.size() < b.size()) return -1;
//    for (int i = a.size() - 1; i >= 0; i--)
//    {
//        if (a[i] > b[i]) return 1;
//        if (a[i] < b[i]) return -1;
//    }
//    return 0;
//}
//vector<int> add(vector<int>& a, vector<int>& b)
//{
//    if (a.size() < b.size()) return add(b, a);
//    vector<int> c;
//    int t = 0;
//    for (int i = 0; i < a.size(); i++)
//    {
//        t += a[i];
//        if (i < b.size()) t += b[i];
//        c.push_back(t % 10);
//        t /= 10;
//    }
//    if (t) c.push_back(t);
//    return c;
//}
//vector<int> sub(vector<int>& a, vector<int>& b)
//{
//    if (cmp(b, a) == 1) return sub(b, a);
//    vector<int> c;
//    int t = 0;
//    for (int i = 0; i < a.size(); i++)
//    {
//        if (t < 0) t = -1;
//        t += a[i];
//        if (i < b.size()) t -= b[i];
//        c.push_back((t + 10) % 10);
//    }
//    while (c.size() > 1 && c.back() == 0) c.pop_back();
//    return c;
//}
//
//vector<int> mul(vector<int>& a, vector<int>& b)
//{
//    vector<int> c(a.size() + b.size());
//    for (int i = 0; i < a.size(); i++)
//        for (int j = 0; j < b.size(); j++)
//            c[i + j] += a[i] * b[j];
//    for (int i = 0, t = 0; i < c.size(); i++)
//    {
//        t += c[i];
//        c[i] = t % 10;
//        t /= 10;
//    }
//    while (c.size() > 1 && c.back() == 0) c.pop_back();
//    return c;
//}
//void print(vector<int> a)
//{
//    for (int i = a.size() - 1; i >= 0; i--)
//        cout << a[i];
//    puts("");
//}
//int main()
//{
//    vector<int> a, b;
//    string A, B;
//    cin >> A >> B;
//    int ha, hb;
//    if (A[0] == '-')
//    {
//        ha = -1;
//        A.substr(1);
//    }
//    else ha = 1;
//    if (B[0] == '-')
//    {
//        hb = -1;
//        A.substr(1);
//    }
//    else hb = 1;
//    for (int i = A.size() - 1; i >= 0; i--) a.push_back(A[i] - '0');
//    for (int i = B.size() - 1; i >= 0; i--) b.push_back(B[i] - '0');
//    bool has_swapped = false;
//    if (ha * hb > 0)
//    {
//        if (cmp(a, b) == -1)
//        {
//            swap(a, b);
//            has_swapped = true;
//        }
//        if (ha < 0) cout << '-';
//        print(add(a, b));
//        if (ha < 0 && !has_swapped || ha > 0 && has_swapped) cout << '-';
//        print(sub(a, b));
//        if (A == "0" || B == "0") cout << 0 << endl;
//        else
//            print(mul(a, b));
//    }
//    else
//    {
//        if (cmp(a, b) == -1)
//        {
//            swap(a, b);
//            has_swapped = true;
//        }
//        if (ha < 0 && !has_swapped || ha > 0 && has_swapped) cout << '-';
//        sub(a, b);
//        if (ha < 0) cout << '-';
//        add(a, b);
//        if (A == "0" || B == "0") cout << 0 << endl;
//        else
//            print(mul(a, b));
//    }
//    return 0;
//}
#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

int cmp(vector<int>& a, vector<int>& b)
{
    if (a.size() > b.size()) return 1;
    if (a.size() < b.size()) return -1;
    for (int i = a.size() - 1; i >= 0; i--)
    {
        if (a[i] > b[i]) return 1;
        if (a[i] < b[i]) return -1;
    }
    return 0;
}
vector<int> add(vector<int>& a, vector<int>& b)
{
    if (a.size() < b.size()) return add(b, a);
    vector<int> c;
    int t = 0;
    for (int i = 0; i < a.size(); i++)
    {
        t += a[i];
        if (i < b.size()) t += b[i];
        c.push_back(t % 10);
        t /= 10;
    }
    if (t) c.push_back(t);
    return c;
}
vector<int> sub(vector<int>& a, vector<int>& b)
{
    if (cmp(b, a) == 1) return sub(b, a);
    vector<int> c;
    int t = 0;
    for (int i = 0; i < a.size(); i++)
    {
        t += a[i];
        if (i < b.size()) t -= b[i];
        c.push_back((t + 10) % 10);
        if (t < 0) t = -1;
        else t = 0;
    }
    while (c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}

vector<int> mul(vector<int>& a, vector<int>& b)
{
    vector<int> c(a.size() + b.size());
    for (int i = 0; i < a.size(); i++)
        for (int j = 0; j < b.size(); j++)
            c[i + j] += a[i] * b[j];
    for (int i = 0, t = 0; i < c.size(); i++)
    {
        t += c[i];
        c[i] = t % 10;
        t /= 10;
    }
    while (c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}
void print(vector<int> a)
{
    for (int i = a.size() - 1; i >= 0; i--)
        cout << a[i];
    puts("");
}
int main()
{
    vector<int> a, b;
    string A, B;
    cin >> A >> B;
    int ha, hb;
    if (A[0] == '-')
    {
        ha = -1;
        A.substr(1);
    }
    else ha = 1;
    if (B[0] == '-')
    {
        hb = -1;
        B.substr(1);
    }
    else hb = 1;
    for (int i = A.size() - 1; i >= 0; i--) a.push_back(A[i] - '0');
    for (int i = B.size() - 1; i >= 0; i--) b.push_back(B[i] - '0');
    bool has_swapped = false;
    if (ha * hb > 0)
    {
        if (cmp(a, b) == -1)
        {
            swap(a, b);
            has_swapped = true;
        }
        if (ha < 0) cout << '-';
        print(add(a, b));
        if (ha < 0 && !has_swapped || ha > 0 && has_swapped) cout << '-';
        print(sub(a, b));
        if (A == "0" || B == "0") cout << 0 << endl;
        else
            print(mul(a, b));
    }
    else
    {
        if (cmp(a, b) == -1)
        {
            swap(a, b);
            has_swapped = true;
        }
        if (ha < 0 && !has_swapped || ha > 0 && has_swapped) cout << '-';
        print(sub(a, b));
        if (ha < 0) cout << '-';
        print(add(a, b));
        if (A == "0" || B == "0") cout << 0 << endl;
        else
        {
            cout << '-';
            print(mul(a, b));
        }
    }
    return 0;
}